05客户端Socket如何连接到服务端(`connect()`方法)?
文章目录
问题: 客户端 Socket 如何连接到服务端(connect()方法)?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
基础使用与异常处理
1 | import socket |
超时设置与域名自动解析
- 超时控制:
connect()默认超时时间由系统决定(通常很长),可通过socket.settimeout(seconds)在连接前设置超时,避免程序长时间挂起。 - 域名解析:
connect()自动调用getaddrinfo将域名解析为 IP 地址,无需手动解析(如socket.gethostbyname)。
1 | client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
连接成功后 Socket 状态变化
- 连接成功后,客户端套接字进入
ESTABLISHED状态,可立即调用send()和recv()收发数据。 - 系统为客户端分配一个临时端口(由内核自动选择),无需调用
bind(),该端口在close()后释放。 - 若连接失败,该套接字对象不可复用,必须关闭后重新创建。
TCP connect 与 UDP connect 的核心差异
| 协议 | 调用 connect 后的效果 | 是否发送网络包 |
|---|---|---|
| TCP | 发起三次握手,建立连接 | ✅ 发送 SYN 包 |
| UDP | 仅在内核记录远端地址,不发送数据 | ❌ 不发送任何包 |
1 | # UDP 的 connect 用法(仅绑定默认目标,减少 sendto 参数) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!